home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung CD 2 (Tewi)(1994).iso / doc / mir / 19debloc < prev    next >
Text File  |  1992-06-29  |  11KB  |  285 lines

  1.               ══════════════════════════════
  2.  
  3.                   9.   DATA DEBLOCKING
  4.  
  5.               ══════════════════════════════
  6.  
  7.  
  8.         ══════════════════════════════
  9. 9.1           An aid to analysis
  10.         ══════════════════════════════
  11.  
  12.             It is common practice to group several data records
  13. together into a block, either of fixed or variable length.  Before
  14. input-output buffering was built into operating system software,
  15. the use of blocks reduced the frequency of read/write instructions
  16. and speeded up programs.  The size of a block depended on (and
  17. often matched) the physical record size of the storage medium.
  18.  
  19.             In this topic, we examine several techniques of
  20. separating blocks of data into records.  The topic is introduced at
  21. this point because deblocking is often done within the analysis
  22. stage.  Deblocking gets rid of byte counts or padding that have
  23. nothing to do with the data being analyzed.  Byte surveys are
  24. cleaner when they are restricted to the data proper.  The binary
  25. component of a file may disappear completely through deblocking.
  26.  
  27.             Blocks may be of fixed or variable length.  The data
  28. within a fixed length block may itself be fixed.  Variable length
  29. data can be found in blocks of any kind.
  30.  
  31.  
  32.         ═════════════════════════════════
  33. 9.2           Reducing line records
  34.         ═════════════════════════════════
  35.  
  36.             Line records date back to punch cards.  Continuous text
  37. would be entered on a series of cards, with blank padding after the
  38. last complete word that could fit on a given card.  Recall the
  39. NEWLINES program, introduced in topic 7.1:
  40.  
  41.                 NEWLINES blocked_in unblocked_out bytes_per_line
  42.  
  43. NEWLINES simply inserted line feeds and carriage returns at fixed
  44. intervals in the data.  For continuous text on 80 column punched
  45. cards, this left blank padding at the end of almost every line.  In
  46. order to get rid of blanks at the end of lines in any ASCII text,
  47. use the utility F_TRAIL:
  48.  
  49.  
  50. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  51. Usage    f_trail [/4] < ASCII text > revised
  52.  
  53.          Remove trailing blanks from lines of ASCII text.  The /4
  54.          option is for backward compatibility only; it leaves a
  55.          blank in the fourth column where a line consists of a
  56.          three digit field number only.
  57.  
  58. input:   Any printable ASCII file.
  59.  
  60. output:  The same file with trailing blanks removed from each line.
  61.  
  62. writeup: MIR TUTORIAL ONE, topic 9
  63. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  64.  
  65. For example, these two commands might be used in sequence:
  66.  
  67.                 NEWLINES blocked.txt stage2.txt 80
  68.                 F_TRAIL < stage2.txt > stage3.txt
  69.  
  70. The file STAGE2.TXT in this case would be fixed length lines of 80
  71. bytes each, plus line feed and carriage return.  STAGE3.TXT would
  72. have variable length lines of text (none greater than 80) and a
  73. line feed and carriage return at the end of each line.
  74.  
  75.             The /4 option in F_TRAIL may be safely ignored.  It
  76. pads a three digit field number with a single blank; this single
  77. blank pad is not required in MIR production format records.  More
  78. on this in MIR Tutorial TWO.
  79.  
  80.  
  81.         ═════════════════════════════════════════
  82. 9.3           Handling fixed length records
  83.         ═════════════════════════════════════════
  84.  
  85.             In topic 7.3 we showed how to extract a single field
  86. from a fixed length record.  Here is a deblocking routine P_FIXED
  87. which places all fields in continuous ASCII text:
  88.  
  89. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  90. usage:  p_fixed  control_file  fixed_length_input > ASCII_output
  91.  
  92.         Converts a fixed record length file to ASCII with field
  93.         numbers.  A control file governs field lengths and
  94.         handling of empty data.
  95.  
  96. input:  [1]  A control file as in P_FIXED.CTL (also appears at
  97.              end of source code).
  98.         [2]  The fixed length records data
  99.  
  100. output: ASCII output with one or more lines per field.  New records
  101.         are signalled by a line containing 000; all other lines
  102.         begin with a three digit field number.  Non-printable
  103.         characters are shown in hex format with leading backslash.
  104.         Additional processing may be needed to bring individual
  105.         fields into production indexing format.
  106.  
  107. writeup: MIR TUTORIAL ONE, topic 9
  108. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  109.  
  110.             Here is the template P_FIXED.CTL:
  111.  
  112. #   Edit a copy of this file to use with P_FIXED.EXE in order
  113. #   to break out fixed length records.  Each line consists of
  114. #   three numbers and zero or more codes; each element is
  115. #   separated by one or more blanks.  The numbers are:
  116. #        field number
  117. #        start byte (followed by R if right half of byte only)
  118. #        end byte   (followed by L if left half of byte only)
  119. #   A special line must be included with field number 0, begin
  120. #   byte 0, and end byte = last byte of record (i.e., record
  121. #   length - 1).
  122. #
  123. #   Comment lines may be included.  Each must start with #
  124. #
  125. #   The codes that follow the three numbers are:
  126. #       B   retain field if blank
  127. #       Z   retain field if zeros
  128. #       N   retain field if nulls
  129. #       LB  retain leading blanks in field
  130. #       LZ  retain leading zeros in field
  131. #       TB  retain trailing blanks in field
  132. #
  133.   0   0   53
  134.   1   0   27 LB TB
  135.   2   28  29
  136.   3   30  32L N
  137.   4   32R 34L
  138.   5   35  38
  139.   6   39  42
  140.   7   43  49
  141.   8   50  50
  142.   9   51  52
  143.  
  144.             The last ten lines above are samples only.  Simply edit
  145. a copy of the template and give it a name of your choice.  Then run
  146. the command P_FIXED with appropriate file names:
  147.  
  148.                 P_FIXED  my.ctl  fixedlen.dta > ascii.dta
  149.  
  150. The output takes this form:
  151.  
  152.         000
  153.         001 Text of field one
  154.         002 Text of field two
  155.             etc.
  156.         015 \9a\81
  157.         016 more data
  158.             etc.
  159.  
  160. The output contains only ASCII characters.  Data that is in non-
  161. printable form is converted to hexadecimal format a character at a
  162. time.  Note that \9a is a single byte; three characters are needed
  163. to represent each hexadecimal value.  Where a byte within a series
  164. of hexadecimals happens to be printable, it is shown in its
  165. printable form.
  166.  
  167.             More processing may be required on some fields. 
  168. Tutorial TWO includes software for that purpose.
  169.  
  170.  
  171.         ══════════════════════════════════════════════
  172. 9.4           Blocked records with ASCII lengths
  173.         ══════════════════════════════════════════════
  174.  
  175.             Variable length lines of ASCII text are sometimes
  176. blocked with a four byte ASCII count at the beginning of each new
  177. line.  There is no line feed or carriage return at the end of a
  178. line.  The program DEBLOC_A may be used to deblock this kind of
  179. data.
  180.  
  181. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  182. Usage    debloc_a  ASCII_blocked_file > unblocked_version
  183.  
  184.          Remove blocking, insert line feeds in ASCII blocked file.
  185.  
  186. input:   ASCII file with four byte inclusive line lengths at the
  187.          beginning of every line, no line feeds at end.
  188.  
  189. output:  Same data with counts out, line feeds/carriage returns in.
  190.  
  191. writeup: MIR TUTORIAL ONE, topic 9
  192. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  193.  
  194.             Data might look like this (usually with longer
  195. lengths):
  196.  
  197.             0016First field.0008No. 2001401234567890013That's it
  198.  
  199. Note the inclusive counting.  The second field has only four bytes,
  200. but the count adds another four bytes... 0008No. 2.  Deblocking
  201. that example would produce:
  202.  
  203.             First field.
  204.             No. 2
  205.             0123456789
  206.             That's it
  207.  
  208.             A byte survey of the blocked file would have heavy
  209. concentrations of digits, especially of the digit zero.  The data
  210. itself may contain digits, but in much smaller proportions.
  211.  
  212.  
  213.         ═══════════════════════════════════════════════
  214. 9.5           Blocked records with binary lengths
  215.         ═══════════════════════════════════════════════
  216.  
  217.             Newspaper and book publishers often use a blocking
  218. format which has two levels.  The blocking values are in binary. 
  219. The order of the binary bytes may vary.  The source code for
  220. DEBLOC_B assumes high order byte, low order byte, then two NULLs to
  221. make up the four bytes in each case.  Alter the source code in the
  222. "get_data" function if you come across data with a different
  223. sequence.  There are typically two levels... a block of several
  224. thousand bytes, and sub-blocks within each block.  The counts are
  225. inclusive.
  226.  
  227.             The program DEBLOC_B deblocks two level binary blocked
  228. data.  It also addresses the problem that the data often originates
  229. on mainframe computers which use the EBCDIC character set.  Using
  230. a program like EBC_ASC to convert from EBCDIC to ASCII of course
  231. replaces the bytes holding the binary block and sub-block counts. 
  232. To ensure the correct count, DEBLOC_B provides for the situation by
  233. reconverting the counting bytes.
  234.  
  235. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  236. Usage    debloc_b  binary_blocked_file [/s][/e] > unblocked_output
  237.  
  238.          Remove blocking, and (if not suppressed by /s argument)
  239.          insert line feeds.  Argument /e must be used if file was
  240.          originally EBCDIC, in which case the block lengths must
  241.          be converted back to EBCDIC before they are interpreted.
  242.  
  243. input:   File with four byte binary inclusive block lengths and
  244.          sub-lengths, two bytes in high to low order, then two
  245.          NULLs.
  246.  
  247. output:  Same data with counts out, line feeds/carriage returns
  248.          in (unless suppressed).
  249.  
  250. writeup: MIR TUTORIAL ONE, topic 9
  251. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  252.  
  253.             The /s option is used if there is fixed length data
  254. included in the result.  (I would have thought it unlikely, until
  255. I was handed a nine-track tape containing such data.)
  256.  
  257.             Notice the assumption that the data itself is printable
  258. ASCII text.  If that is not the case and you are working in DOS,
  259. amend the source code to write to a named binary output file.
  260.  
  261.             An ancestor variation of DEBLOC_B is included with the
  262. source code.  It has not been stylized for "copyleft", nor has it
  263. been tested recently.  The program is P_MARC.C, intended for
  264. deblocking MARC records.  MARC records were common for library
  265. citation databases.  A companion ASCII document, MARC_REC.DOC, is
  266. also included with the software.  It was reverse engineered from a
  267. customer's data several years ago.  Its accuracy is not assured.
  268.  
  269.  
  270. ≡≡≡≡->> QUESTION:
  271.             If you have access to data in MARC record format, could
  272.             you either furnish a sample, or (better yet) take a run
  273.             at upgrading both the MARC_REC.DOC document and the
  274.             P_MARC.C source code?
  275.                                                             <<-≡≡≡≡
  276.  
  277.  
  278.                         *   *   *   *   *
  279.  
  280.  
  281.             Apart from the Glossary/Index, this completes MIR
  282. Tutorial ONE.  You have tools and learning materials that should
  283. equip you to analyze most kinds of data that are likely to be
  284. indexed for search using normal ASCII search terms... words,
  285. phrases, numeric values, subject categories, etc.